package controller.gui.mainmenu;

import java.awt.Point;
import java.awt.Rectangle;
import java.awt.event.ActionEvent;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;

import javax.swing.JButton;
import javax.swing.JViewport;

import mapelements.foreground.Foreground;
import mapelements.foreground.MapObject;


import controller.Controller;
import controller.NullStaticObjectException;
import controller.PrimaryButtonController;
import controller.StratumLevelUser;
import errors.DimensionNotAcceptableException;
import errors.StratumNotFoundException;
import gui.Display;
import gui.MapEditorFrame;

/**
 * 
 * @author koldar
 * @version 1.1
 */
public final class DeleteMapElementController extends PrimaryButtonController implements MouseListener,StratumLevelUser{
	
	/**l'oggetto su cui vengono eliminato background e foregrounds*/
	private Display display; 
	
	public DeleteMapElementController(JButton button,Display towire) {
		super(button);
		this.display=towire;
	}
	
	@Override
	public void wizardInizializer(ActionEvent arg0)	throws NullStaticObjectException, DimensionNotAcceptableException {
		this.display.addMouseListener(this);
	}

	@Override
	public void mouseClicked(MouseEvent arg0) {
		if (arg0.getButton()==MouseEvent.BUTTON1){//pulsante sinistro
			//**************** ritrovo le coordinate in cui l'utente ha fatto click *******************
			int mapx=(int)Math.floor((arg0.getX()+0.0)/(this.getCurrentmap().getMapresolution()));
			int mapy=(int)Math.floor((arg0.getY()+0.0)/(this.getCurrentmap().getMapresolution()));
			//***************** cerco il PRIMO MapElement che l'utente ha cliccato **********************
			for (int i=this.stratum.getValue();i>=0;i--){
				for (String s:this.getCurrentmap().getStratum(i).keySet()){
					Foreground frg=this.currentmap.getForeground(s);
					//i MapObject hanno shape in funzione della x e y (quindi ha coordinate relative) mentre i MapLayer hanno coordinate di shape assolute!
					//FIXME si creano bei giochini se vuioi eliminare un mapobject sullo stesso strato di un mapLayer nello stesso punto. A volte il MapLayer viene eliminato prima del mapobject! -.-'
					if (frg.getAbsoluteShape().contains(new Point(mapx,mapy))){
						//delete del foreground
						this.currentmap.removeForeground(s);
						return;
					}
				}
			}
			//non ho trovato alcun foreground... annullo il background
			this.currentmap.setBackground(null);
		}
		if (arg0.getButton()==MouseEvent.BUTTON3){//pulsante destro
			this.display.removeMouseListener(this);
			this.setToIdle();
		}
	}

	@Override
	public void mousePressed(MouseEvent e) {
	}

	@Override
	public void mouseReleased(MouseEvent e) {
	}

	@Override
	public void mouseEntered(MouseEvent e) {
	}

	@Override
	public void mouseExited(MouseEvent e) {
	}

}
